home *** CD-ROM | disk | FTP | other *** search
/ All for Cell Phones: Sony Ericsson / Sony-Ericsson 2004.iso / Java / 5-in-a-raw / Coherence.jar / Game.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-03-15  |  15.3 KB  |  1,014 lines

  1. import java.io.ByteArrayInputStream;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.DataInputStream;
  4. import java.io.DataOutputStream;
  5. import java.util.Random;
  6. import javax.microedition.lcdui.Canvas;
  7. import javax.microedition.lcdui.Displayable;
  8. import javax.microedition.lcdui.Font;
  9. import javax.microedition.lcdui.Graphics;
  10. import javax.microedition.lcdui.Image;
  11.  
  12. final class Game extends Canvas {
  13.    private byte[] board;
  14.    private byte[] undoBoard;
  15.    private Image[] image;
  16.    private Image logo;
  17.    private Image goi;
  18.    private Image tti;
  19.    private Image mrgi;
  20.    private Image hsi;
  21.    // $FF: renamed from: db javax.microedition.lcdui.Image
  22.    private Image field_0;
  23.    private Graphics dbg;
  24.    // $FF: renamed from: x byte
  25.    private byte field_1;
  26.    // $FF: renamed from: y byte
  27.    private byte field_2;
  28.    private boolean carrying;
  29.    // $FF: renamed from: pX byte
  30.    private byte field_3;
  31.    // $FF: renamed from: pY byte
  32.    private byte field_4;
  33.    private int game_score;
  34.    private boolean gameOver;
  35.    private boolean canUndo;
  36.    private boolean reset;
  37.    private int undo_score;
  38.    private int high_score;
  39.    private Runko runko;
  40.    private int xpad;
  41.    private int xpad2;
  42.    private int ypad;
  43.    private int ypad2;
  44.    private Object obj = new Object();
  45.    private int state;
  46.    // $FF: renamed from: bt byte[]
  47.    private byte[] field_5;
  48.    private int blink;
  49.    private byte type = 101;
  50.    private Font font;
  51.    private int bgColor;
  52.    // $FF: renamed from: hc boolean
  53.    private boolean field_6;
  54.    // $FF: renamed from: w int
  55.    private int field_7;
  56.    // $FF: renamed from: h int
  57.    private int field_8;
  58.    // $FF: renamed from: w2 int
  59.    private int field_9;
  60.    // $FF: renamed from: h2 int
  61.    private int field_10;
  62.    private boolean paused;
  63.    Thread thread;
  64.    private int progress = 0;
  65.    Image[] kuvat;
  66.    boolean fthn = true;
  67.    int drawThis;
  68.    int key;
  69.    // $FF: renamed from: kp boolean
  70.    boolean field_11;
  71.    boolean[] poista = new boolean[70];
  72.    static final int[] dirs = new int[]{-1, -1, 0, -1, 1, -1, 1, 0, -1, 0, -1, 1, 0, 1, 1, 1};
  73.    boolean[] closed = new boolean[70];
  74.    static Random rnd0 = new Random();
  75.    Image ihsEasy;
  76.    Font hsfont;
  77.    private String[][] hsName = new String[1][10];
  78.    private int[][] hsValue = new int[1][10];
  79.    boolean bStartMenu;
  80.    Image[] iHelp;
  81.    Image[] iStart;
  82.    // $FF: renamed from: ih int
  83.    int field_12;
  84.    boolean startEasy;
  85.    boolean sblink;
  86.  
  87.    Game(Runko var1) {
  88.       this.runko = var1;
  89.       this.board = new byte[70];
  90.       this.undoBoard = new byte[70];
  91.       this.image = new Image[8];
  92.       this.field_5 = new byte[70];
  93.       this.field_7 = ((Canvas)this).getWidth();
  94.       this.field_8 = ((Canvas)this).getHeight();
  95.       this.field_9 = this.field_7 >> 1;
  96.       this.field_10 = this.field_8 >> 1;
  97.       this.font = Font.getFont(64, 0, 8);
  98.       this.bgColor = 16777215;
  99.    }
  100.  
  101.    public Image[] getPics() {
  102.       return this.kuvat;
  103.    }
  104.  
  105.    public void exit() {
  106.       this.reset = true;
  107.       Object var1 = this.obj;
  108.       synchronized(var1) {
  109.          this.obj.notifyAll();
  110.       }
  111.    }
  112.  
  113.    public void init() {
  114.       try {
  115.          Runko.setProgressMax(13);
  116.          this.field_0 = Image.createImage(this.field_7, this.field_8);
  117.          this.dbg = this.field_0.getGraphics();
  118.          Runko.addProgress();
  119.  
  120.          for(int var1 = 0; var1 < 8; ++var1) {
  121.             this.image[var1] = Jil.loadImage(Integer.toString(var1));
  122.             Runko.addProgress();
  123.          }
  124.  
  125.          this.goi = Jil.loadImage("gameover");
  126.          Runko.addProgress();
  127.          this.tti = Jil.loadImage("topten");
  128.          Runko.addProgress();
  129.          this.hsi = Image.createImage(this.field_7, this.font.getHeight() * 10);
  130.          this.xpad = this.field_7 - this.image[0].getWidth() >> 1;
  131.          this.ypad = this.field_8 - this.image[0].getHeight() >> 1;
  132.          this.xpad2 = this.xpad + 2;
  133.          this.ypad2 = this.ypad;
  134.          Runko.addProgress();
  135.          this.hsfont = Font.getFont(64, 0, 8);
  136.          this.ihsEasy = Image.createImage(this.field_7 > this.tti.getWidth() ? this.tti.getWidth() : this.field_7, 7 + this.tti.getHeight() + this.hsfont.getHeight() * 10);
  137.          Runko.addProgress();
  138.          this.kuvat = new Image[1];
  139.          this.kuvat[0] = this.ihsEasy;
  140.  
  141.          for(int var2 = 0; var2 < 10; ++var2) {
  142.             this.hsName[0][var2] = "MrG";
  143.             this.hsValue[0][var2] = 1000 - var2 * 100;
  144.          }
  145.  
  146.          this.iHelp = new Image[2];
  147.          this.iHelp[0] = Jil.loadImage("intro");
  148.          this.iHelp[1] = Jil.loadImage("controls");
  149.          this.iStart = new Image[2];
  150.          this.iStart[0] = Jil.loadImage("start_off");
  151.          Runko.addProgress();
  152.          this.iStart[1] = Jil.loadImage("start_on");
  153.          this.loadHighScores();
  154.          this.updateHighscoreImages();
  155.          Runko.addProgress();
  156.       } catch (Exception var3) {
  157.          System.out.println(((Throwable)var3).toString());
  158.       }
  159.  
  160.    }
  161.  
  162.    public int run() {
  163.       try {
  164.          this.bStartMenu = true;
  165.  
  166.          while(!((Displayable)this).isShown()) {
  167.             Thread.sleep(100L);
  168.          }
  169.  
  170.          this.startMenu();
  171.          this.bStartMenu = false;
  172.          this.reset = false;
  173.          this.newGame();
  174.          this.blink = 0;
  175.          this.type = 2;
  176.          this.state = 0;
  177.          this.myPaint();
  178.          Sounds.play(7);
  179.          this.myPaint(9);
  180.          this.myPaint(5);
  181.          this.myPaint(8);
  182.          this.key = -1;
  183.  
  184.          while(!this.gameOver && !this.reset) {
  185.             for(; !this.isKeyPressed() && !this.reset; this.waitForKey(300)) {
  186.                this.state ^= 1;
  187.                if (this.state == 0) {
  188.                   if (this.carrying) {
  189.                      this.myPaint(7);
  190.                   }
  191.  
  192.                   this.myPaint(10);
  193.                } else {
  194.                   if (this.carrying) {
  195.                      this.myPaint(6);
  196.                   }
  197.  
  198.                   this.myPaint(4);
  199.                }
  200.             }
  201.  
  202.             if (this.reset) {
  203.                break;
  204.             }
  205.  
  206.             while(true) {
  207.                this.myPaint(6);
  208.                this.myPaint(3);
  209.                this.keys();
  210.                if (this.carrying) {
  211.                   this.myPaint(7);
  212.                }
  213.  
  214.                this.myPaint(4);
  215.                this.waitForKeyRelease(150);
  216.                if (!this.isKeyPressed()) {
  217.                   break;
  218.                }
  219.             }
  220.          }
  221.  
  222.          if (!this.reset) {
  223.             this.myPaint(3);
  224.             this.type = 3;
  225.             this.myPaint();
  226.             Thread.sleep(2000L);
  227.             Thread.sleep(2000L);
  228.          }
  229.       } catch (Exception var2) {
  230.       }
  231.  
  232.       return -1;
  233.    }
  234.  
  235.    protected void hideNotify() {
  236.       if (this.fthn) {
  237.          this.fthn = false;
  238.       } else {
  239.          this.pause();
  240.       }
  241.  
  242.    }
  243.  
  244.    protected void showNotify() {
  245.       this.resume();
  246.       this.myPaint();
  247.    }
  248.  
  249.    private void myPaint() {
  250.       this.drawThis = 0;
  251.       ((Canvas)this).repaint();
  252.       ((Canvas)this).serviceRepaints();
  253.       Thread.yield();
  254.    }
  255.  
  256.    private void myPaint(int var1) {
  257.       this.drawThis = var1;
  258.       ((Canvas)this).repaint();
  259.       ((Canvas)this).serviceRepaints();
  260.       Thread.yield();
  261.    }
  262.  
  263.    protected void paint(Graphics var1) {
  264.       if (this.bStartMenu) {
  265.          this.startMenu(var1);
  266.       } else {
  267.          var1.setClip(0, 0, this.field_7, this.field_8);
  268.          label64:
  269.          switch (this.drawThis) {
  270.             case 0:
  271.                switch (this.type) {
  272.                   case 2:
  273.                      this.dbg.setColor(this.bgColor);
  274.                      this.dbg.fillRect(0, 0, this.field_7, this.field_8);
  275.                      this.drawBoard(this.dbg);
  276.                      this.drawScore(this.dbg);
  277.                      var1.drawImage(this.field_0, 0, 0, 20);
  278.                      break label64;
  279.                   case 3:
  280.                      this.dbg.setColor(this.bgColor);
  281.                      this.dbg.fillRect(0, 0, this.field_7, this.field_8);
  282.                      this.drawBoard(this.dbg);
  283.                      this.drawScore(this.dbg);
  284.                      this.dbg.drawImage(this.goi, this.field_9, 40, 3);
  285.                      var1.drawImage(this.field_0, 0, 0, 20);
  286.                      break label64;
  287.                   case 102:
  288.                      var1.setColor(16777215);
  289.                      var1.fillRect(0, 0, this.field_7, this.field_8);
  290.                   default:
  291.                      break label64;
  292.                }
  293.             case 1:
  294.                for(byte var2 = 0; var2 < 7; ++var2) {
  295.                   for(byte var5 = 0; var5 < 10; ++var5) {
  296.                      if (this.field_5[var2 * 10 + var5] != 0) {
  297.                         var1.setClip(this.xpad2 + var5 * 9, this.ypad2 + var2 * 9, 10, 10);
  298.                         var1.drawImage(this.image[0], this.xpad, this.ypad, 20);
  299.                      }
  300.                   }
  301.                }
  302.                break;
  303.             case 2:
  304.                for(byte var3 = 0; var3 < 7; ++var3) {
  305.                   for(byte var4 = 0; var4 < 10; ++var4) {
  306.                      if (this.field_5[var3 * 10 + var4] != 0) {
  307.                         var1.drawImage(this.image[this.field_5[var3 * 10 + var4]], this.xpad2 + 1 + var4 * 9, this.ypad2 + 1 + var3 * 9, 20);
  308.                      }
  309.                   }
  310.                }
  311.                break;
  312.             case 3:
  313.                var1.setClip(this.xpad2 + this.field_1 * 9, this.ypad2 + this.field_2 * 9, 10, 10);
  314.                this.drawBoard(var1);
  315.                break;
  316.             case 4:
  317.                var1.setClip(this.xpad2 + this.field_1 * 9, this.ypad2 + this.field_2 * 9, 10, 10);
  318.                this.drawBoard(var1);
  319.                if (this.carrying) {
  320.                   var1.drawImage(this.image[this.board[this.field_4 * 10 + this.field_3]], this.xpad2 + 1 + this.field_1 * 9, this.ypad2 + 1 + this.field_2 * 9, 20);
  321.                }
  322.  
  323.                var1.setColor(0);
  324.                var1.drawRect(this.xpad2 + this.field_1 * 9, this.ypad2 + this.field_2 * 9, 9, 9);
  325.                break;
  326.             case 5:
  327.                this.drawBoard(var1);
  328.                break;
  329.             case 6:
  330.                var1.setClip(this.xpad2 + this.field_3 * 9, this.ypad2 + this.field_4 * 9, 10, 10);
  331.                this.drawBoard(var1);
  332.                break;
  333.             case 7:
  334.                var1.setColor(0);
  335.                var1.drawRect(this.xpad2 + this.field_3 * 9, this.ypad2 + this.field_4 * 9, 9, 9);
  336.                break;
  337.             case 8:
  338.                this.drawScore(var1);
  339.                break;
  340.             case 9:
  341.                var1.setColor(this.bgColor);
  342.                var1.fillRect(0, 0, this.field_7, this.field_8);
  343.                break;
  344.             case 10:
  345.                var1.setClip(this.xpad2 + this.field_1 * 9, this.ypad2 + this.field_2 * 9, 10, 10);
  346.                this.drawBoard(var1);
  347.                var1.setColor(0);
  348.                var1.drawRect(this.xpad2 + 1 + this.field_1 * 9, this.ypad2 + 1 + this.field_2 * 9, 7, 7);
  349.          }
  350.  
  351.          this.drawThis = 0;
  352.       }
  353.  
  354.    }
  355.  
  356.    private void drawBoard(Graphics var1) {
  357.       var1.drawImage(this.image[0], this.xpad, this.ypad, 20);
  358.       int var2 = var1.getClipX() - 9;
  359.       int var3 = var2 + var1.getClipWidth() + 9;
  360.       int var4 = var1.getClipY() - 9;
  361.       int var5 = var4 + var1.getClipHeight() + 9;
  362.  
  363.       for(byte var6 = 0; var6 < 7; ++var6) {
  364.          for(byte var7 = 0; var7 < 10; ++var7) {
  365.             int var8 = this.xpad2 + 1 + var7 * 9;
  366.             int var9 = this.ypad2 + 1 + var6 * 9;
  367.             if (this.board[var6 * 10 + var7] > 0 && var8 >= var2 && var9 >= var4 && var8 <= var3 && var9 <= var5) {
  368.                var1.drawImage(this.image[this.board[var6 * 10 + var7]], var8, var9, 20);
  369.             }
  370.          }
  371.       }
  372.  
  373.    }
  374.  
  375.    private void drawScore(Graphics var1) {
  376.       var1.setClip(0, this.ypad + 76 - this.font.getBaselinePosition(), this.field_7, this.font.getHeight());
  377.       var1.drawImage(this.image[0], this.xpad, this.ypad, 20);
  378.       var1.setColor(0);
  379.       var1.drawString("Score: " + this.game_score, this.field_9, this.ypad + 76, 65);
  380.       var1.setClip(0, 0, this.field_7, this.field_8);
  381.    }
  382.  
  383.    private void undoMove() {
  384.       if (this.canUndo) {
  385.          Sounds.play(5);
  386.          System.arraycopy(this.undoBoard, 0, this.board, 0, this.undoBoard.length);
  387.          this.game_score = this.undo_score;
  388.          this.canUndo = false;
  389.       }
  390.  
  391.    }
  392.  
  393.    private void newGame() {
  394.       for(int var1 = 0; var1 < this.board.length; ++var1) {
  395.          this.board[var1] = 0;
  396.       }
  397.  
  398.       this.carrying = false;
  399.  
  400.       for(int var2 = 0; var2 < 9 && !this.checkFull(); ++var2) {
  401.          int var3 = rnd() % 10;
  402.          int var4 = rnd() % 7;
  403.          if (this.board[var4 * 10 + var3] == 0) {
  404.             this.board[var4 * 10 + var3] = (byte)(rnd() % 7 + 1);
  405.          }
  406.       }
  407.  
  408.       this.canUndo = false;
  409.       this.gameOver = false;
  410.       this.game_score = 0;
  411.  
  412.       for(int var5 = 0; var5 < this.field_5.length; ++var5) {
  413.          this.field_5[var5] = 0;
  414.       }
  415.  
  416.    }
  417.  
  418.    private void keys() {
  419.       if (this.key == 1) {
  420.          --this.field_1;
  421.          if (this.field_1 < 0) {
  422.             this.field_1 = 9;
  423.          }
  424.       } else if (this.key == 2) {
  425.          ++this.field_1;
  426.          if (this.field_1 > 9) {
  427.             this.field_1 = 0;
  428.          }
  429.       } else if (this.key == 3) {
  430.          ++this.field_2;
  431.          if (this.field_2 > 6) {
  432.             this.field_2 = 0;
  433.          }
  434.       } else if (this.key == 4) {
  435.          --this.field_2;
  436.          if (this.field_2 < 0) {
  437.             this.field_2 = 6;
  438.          }
  439.       } else if (this.key == 6) {
  440.          --this.field_1;
  441.          --this.field_2;
  442.          if (this.field_1 < 0) {
  443.             this.field_1 = 9;
  444.          }
  445.  
  446.          if (this.field_2 < 0) {
  447.             this.field_2 = 6;
  448.          }
  449.       } else if (this.key == 7) {
  450.          ++this.field_1;
  451.          --this.field_2;
  452.          if (this.field_1 > 9) {
  453.             this.field_1 = 0;
  454.          }
  455.  
  456.          if (this.field_2 < 0) {
  457.             this.field_2 = 6;
  458.          }
  459.       } else if (this.key == 8) {
  460.          --this.field_1;
  461.          ++this.field_2;
  462.          if (this.field_1 < 0) {
  463.             this.field_1 = 9;
  464.          }
  465.  
  466.          if (this.field_2 > 6) {
  467.             this.field_2 = 0;
  468.          }
  469.       } else if (this.key == 9) {
  470.          ++this.field_1;
  471.          ++this.field_2;
  472.          if (this.field_1 > 9) {
  473.             this.field_1 = 0;
  474.          }
  475.  
  476.          if (this.field_2 > 6) {
  477.             this.field_2 = 0;
  478.          }
  479.       } else if (this.key == 5) {
  480.          this.carrying = false;
  481.          Sounds.play(5);
  482.       } else if (this.key == 0) {
  483.          this.key = -1;
  484.          if (this.carrying) {
  485.             if (this.field_1 == this.field_3 && this.field_2 == this.field_4) {
  486.                this.carrying = false;
  487.                Sounds.play(5);
  488.             } else if (this.tryMove()) {
  489.                this.carrying = false;
  490.                Sounds.play(3);
  491.                if (Runko.VibraOn) {
  492.                   Jil.triggerVibrator(50);
  493.                }
  494.  
  495.                this.myPaint(3);
  496.                this.myPaint(6);
  497.                if (!this.checkLines() && this.newTurn()) {
  498.                   Sounds.play(8);
  499.                   this.gameOver = true;
  500.                   this.type = 2;
  501.                   this.canUndo = false;
  502.                }
  503.  
  504.                this.myPaint(8);
  505.             } else {
  506.                Sounds.play(4);
  507.             }
  508.          } else if (this.board[this.field_2 * 10 + this.field_1] != 0) {
  509.             Sounds.play(3);
  510.             if (Runko.VibraOn) {
  511.                Jil.triggerVibrator(50);
  512.             }
  513.  
  514.             this.field_3 = this.field_1;
  515.             this.field_4 = this.field_2;
  516.             this.carrying = true;
  517.          }
  518.       }
  519.  
  520.    }
  521.  
  522.    private boolean isKeyPressed() {
  523.       return this.key >= 0;
  524.    }
  525.  
  526.    protected void pause() {
  527.       this.paused = true;
  528.    }
  529.  
  530.    protected void resume() {
  531.       this.paused = false;
  532.       Object var1 = this.obj;
  533.       synchronized(var1) {
  534.          this.obj.notifyAll();
  535.       }
  536.    }
  537.  
  538.    private void waitForAnyKey(int var1) throws Exception {
  539.       while(this.paused) {
  540.          Object var2 = this.obj;
  541.          synchronized(var2) {
  542.             this.obj.wait();
  543.          }
  544.       }
  545.  
  546.       Object var7 = this.obj;
  547.       synchronized(var7) {
  548.          this.obj.notifyAll();
  549.          this.obj.wait((long)var1);
  550.       }
  551.    }
  552.  
  553.    private void waitForKey(int var1) throws Exception {
  554.       while(this.paused) {
  555.          Object var2 = this.obj;
  556.          synchronized(var2) {
  557.             this.obj.wait();
  558.          }
  559.       }
  560.  
  561.       if (this.key < 0) {
  562.          Object var7 = this.obj;
  563.          synchronized(var7) {
  564.             this.obj.wait((long)var1);
  565.          }
  566.       }
  567.  
  568.    }
  569.  
  570.    private void waitForKeyRelease(int var1) throws Exception {
  571.       while(this.paused) {
  572.          Object var2 = this.obj;
  573.          synchronized(var2) {
  574.             this.obj.wait();
  575.          }
  576.       }
  577.  
  578.       if (this.key >= 0) {
  579.          Object var7 = this.obj;
  580.          synchronized(var7) {
  581.             this.obj.wait((long)var1);
  582.          }
  583.       }
  584.  
  585.    }
  586.  
  587.    protected void keyPressed(int var1) {
  588.       if (Jil.isMenuKey(var1)) {
  589.          this.pause();
  590.          this.runko.showMenu();
  591.       } else {
  592.          this.key = -1;
  593.          this.field_11 = true;
  594.          label32:
  595.          switch (((Canvas)this).getGameAction(var1)) {
  596.             case 1:
  597.                this.key = 4;
  598.                break;
  599.             case 2:
  600.                this.key = 1;
  601.                break;
  602.             case 3:
  603.             case 4:
  604.             case 7:
  605.             default:
  606.                switch (var1) {
  607.                   case 49:
  608.                      this.key = 6;
  609.                      break label32;
  610.                   case 50:
  611.                      this.key = 4;
  612.                      break label32;
  613.                   case 51:
  614.                      this.key = 7;
  615.                      break label32;
  616.                   case 52:
  617.                      this.key = 1;
  618.                      break label32;
  619.                   case 53:
  620.                      this.key = 0;
  621.                      break label32;
  622.                   case 54:
  623.                      this.key = 2;
  624.                      break label32;
  625.                   case 55:
  626.                      this.key = 8;
  627.                      break label32;
  628.                   case 56:
  629.                      this.key = 3;
  630.                      break label32;
  631.                   case 57:
  632.                      this.key = 9;
  633.                      break label32;
  634.                   default:
  635.                      this.key = 5;
  636.                      break label32;
  637.                }
  638.             case 5:
  639.                this.key = 2;
  640.                break;
  641.             case 6:
  642.                this.key = 3;
  643.                break;
  644.             case 8:
  645.                this.key = 0;
  646.          }
  647.  
  648.          Object var2 = this.obj;
  649.          synchronized(var2) {
  650.             this.obj.notifyAll();
  651.          }
  652.       }
  653.  
  654.    }
  655.  
  656.    protected void keyReleased(int var1) {
  657.       this.field_11 = false;
  658.       this.key = -1;
  659.       Object var2 = this.obj;
  660.       synchronized(var2) {
  661.          this.obj.notifyAll();
  662.       }
  663.    }
  664.  
  665.    private boolean checkLines() {
  666.       for(int var1 = 0; var1 < this.poista.length; ++var1) {
  667.          this.poista[var1] = false;
  668.       }
  669.  
  670.       for(int var2 = 0; var2 < 7; ++var2) {
  671.          for(int var3 = 0; var3 < 10; ++var3) {
  672.             byte var4 = this.board[var2 * 10 + var3];
  673.             if (var4 != 0) {
  674.                for(int var5 = 0; var5 < 8; ++var5) {
  675.                   var4 = this.board[var2 * 10 + var3];
  676.                   int var6 = 0;
  677.                   boolean var7 = false;
  678.                   int var8 = var3;
  679.  
  680.                   for(int var9 = var2; !var7; var9 += dirs[var5 * 2 + 1]) {
  681.                      if (var9 <= 6 && var9 >= 0 && var8 <= 9 && var8 >= 0) {
  682.                         if (var4 == 1 && this.board[var9 * 10 + var8] != 0) {
  683.                            var4 = this.board[var9 * 10 + var8];
  684.                         }
  685.  
  686.                         if (this.board[var9 * 10 + var8] != var4 && this.board[var9 * 10 + var8] != 1) {
  687.                            var7 = true;
  688.                         } else {
  689.                            ++var6;
  690.                         }
  691.                      } else {
  692.                         var7 = true;
  693.                      }
  694.  
  695.                      var8 += dirs[var5 * 2 + 0];
  696.                   }
  697.  
  698.                   if (var6 >= 5) {
  699.                      for(int var10 = 0; var10 < var6; ++var10) {
  700.                         this.poista[(var2 + var10 * dirs[var5 * 2 + 1]) * 10 + var3 + var10 * dirs[var5 * 2 + 0]] = true;
  701.                      }
  702.                   }
  703.                }
  704.             }
  705.          }
  706.       }
  707.  
  708.       boolean var12 = false;
  709.       int var14 = 0;
  710.  
  711.       for(int var15 = 0; var15 < 7; ++var15) {
  712.          for(int var16 = 0; var16 < 10; ++var16) {
  713.             if (this.poista[var15 * 10 + var16]) {
  714.                var12 = true;
  715.                var14 += 5;
  716.                this.game_score += 5 + var14;
  717.                this.field_5[var15 * 10 + var16] = this.board[var15 * 10 + var16];
  718.                this.board[var15 * 10 + var16] = 0;
  719.             }
  720.          }
  721.       }
  722.  
  723.       if (var12) {
  724.          Sounds.play(0);
  725.          if (Runko.VibraOn) {
  726.             Jil.triggerVibrator(250);
  727.          }
  728.  
  729.          try {
  730.             for(int var17 = 0; var17 < 5; ++var17) {
  731.                this.waitForKey(50);
  732.                this.myPaint(2);
  733.                this.waitForKey(50);
  734.                this.myPaint(1);
  735.             }
  736.          } catch (Exception var11) {
  737.          }
  738.  
  739.          for(int var18 = 0; var18 < this.field_5.length; ++var18) {
  740.             this.field_5[var18] = 0;
  741.          }
  742.       }
  743.  
  744.       return var12;
  745.    }
  746.  
  747.    private boolean checkFull() {
  748.       for(int var1 = 0; var1 < this.board.length; ++var1) {
  749.          if (this.board[var1] == 0) {
  750.             return false;
  751.          }
  752.       }
  753.  
  754.       return true;
  755.    }
  756.  
  757.    private boolean newTurn() {
  758.       for(int var1 = 0; var1 < this.board.length; ++var1) {
  759.          if (this.field_5[var1] == 2) {
  760.             this.board[var1] = 0;
  761.             this.field_5[var1] = 0;
  762.          }
  763.       }
  764.  
  765.       for(int var2 = 0; var2 < 3; ++var2) {
  766.          if (this.checkFull()) {
  767.             return true;
  768.          }
  769.  
  770.          int var3;
  771.          int var4;
  772.          do {
  773.             var3 = rnd() % 10;
  774.             var4 = rnd() % 7;
  775.          } while(this.board[var4 * 10 + var3] != 0);
  776.  
  777.          this.board[var4 * 10 + var3] = (byte)(rnd() % 7 + 1);
  778.          this.field_5[var4 * 10 + var3] = this.board[var4 * 10 + var3];
  779.       }
  780.  
  781.       try {
  782.          for(int var6 = 0; var6 < 2; ++var6) {
  783.             this.waitForKey(50);
  784.             this.myPaint(1);
  785.             this.waitForKey(50);
  786.             this.myPaint(2);
  787.          }
  788.       } catch (Exception var5) {
  789.       }
  790.  
  791.       for(int var7 = 0; var7 < this.field_5.length; ++var7) {
  792.          this.field_5[var7] = 0;
  793.       }
  794.  
  795.       return this.checkFull();
  796.    }
  797.  
  798.    private boolean tryMove() {
  799.       if (this.checkPath(this.field_3, this.field_4, this.field_1, this.field_2)) {
  800.          System.arraycopy(this.board, 0, this.undoBoard, 0, this.board.length);
  801.          this.undo_score = this.game_score;
  802.          this.canUndo = true;
  803.          this.board[this.field_2 * 10 + this.field_1] = this.board[this.field_4 * 10 + this.field_3];
  804.          this.board[this.field_4 * 10 + this.field_3] = 0;
  805.          return true;
  806.       } else {
  807.          return false;
  808.       }
  809.    }
  810.  
  811.    private boolean checkPath(int var1, int var2, int var3, int var4) {
  812.       for(int var5 = 0; var5 < this.board.length; ++var5) {
  813.          if (this.board[var5] == 0) {
  814.             this.closed[var5] = false;
  815.          } else {
  816.             this.closed[var5] = true;
  817.          }
  818.       }
  819.  
  820.       return this.checkPoint(var1, var2, var3, var4);
  821.    }
  822.  
  823.    private boolean checkPoint(int var1, int var2, int var3, int var4) {
  824.       this.closed[var2 * 10 + var1] = true;
  825.       if (var1 == var3 && var2 == var4) {
  826.          return true;
  827.       } else if (var2 < 6 && !this.closed[(var2 + 1) * 10 + var1] && this.checkPoint(var1, var2 + 1, var3, var4)) {
  828.          return true;
  829.       } else if (var1 < 9 && !this.closed[var2 * 10 + var1 + 1] && this.checkPoint(var1 + 1, var2, var3, var4)) {
  830.          return true;
  831.       } else if (var2 > 0 && !this.closed[(var2 - 1) * 10 + var1] && this.checkPoint(var1, var2 - 1, var3, var4)) {
  832.          return true;
  833.       } else {
  834.          return var1 > 0 && !this.closed[var2 * 10 + (var1 - 1)] && this.checkPoint(var1 - 1, var2, var3, var4);
  835.       }
  836.    }
  837.  
  838.    static int rnd() {
  839.       return rnd0.nextInt() >>> 1;
  840.    }
  841.  
  842.    void updateHighscoreImages() {
  843.       this.updateHighscoreImage(this.ihsEasy, this.tti, this.hsName[0], this.hsValue[0]);
  844.    }
  845.  
  846.    void updateHighscoreImage(Image var1, Image var2, String[] var3, int[] var4) {
  847.       Graphics var5 = var1.getGraphics();
  848.       Font var6 = this.font;
  849.       var5.setFont(var6);
  850.       var5.setColor(16777215);
  851.       var5.fillRect(0, 0, var1.getWidth(), var1.getHeight());
  852.       var5.setColor(0);
  853.       var5.drawImage(var2, var1.getWidth() >> 1, 2, 17);
  854.       int var7 = var6.stringWidth("10.") + 2;
  855.       int var8 = var1.getWidth() - 8;
  856.       int var9 = 0;
  857.  
  858.       for(int var10 = 18 + var6.getBaselinePosition(); var9 < 10; var10 += var6.getHeight()) {
  859.          var5.drawString(Integer.toString(var9 + 1) + ".", var7, var10, 72);
  860.          var5.drawString(var3[var9], var7 + 1, var10, 68);
  861.          var5.drawString(Integer.toString(var4[var9]), var8, var10, 72);
  862.          int var11 = var8 - var6.stringWidth(Integer.toString(var4[var9])) - 2;
  863.          int var12 = (var7 + 7 + var6.stringWidth(var3[var9])) / 5 * 5;
  864.          if (var12 < var11) {
  865.             while(var12 < var11) {
  866.                var5.drawLine(var12, var10, var12, var10);
  867.                var12 += 5;
  868.             }
  869.          }
  870.  
  871.          ++var9;
  872.       }
  873.  
  874.    }
  875.  
  876.    private boolean checkHighScore(int var1, int var2) {
  877.       for(int var3 = 0; var3 < this.hsName[var1].length; ++var3) {
  878.          if (this.hsValue[var1][var3] <= var2) {
  879.             for(int var4 = this.hsName[var1].length - 1; var4 > var3; --var4) {
  880.                this.hsName[var1][var4] = this.hsName[var1][var4 - 1];
  881.                this.hsValue[var1][var4] = this.hsValue[var1][var4 - 1];
  882.             }
  883.  
  884.             this.hsName[var1][var3] = this.runko.getName("New high score!", "Enter your name:");
  885.             this.hsValue[var1][var3] = var2;
  886.             this.updateHighscoreImages();
  887.  
  888.             try {
  889.                this.saveHighScores();
  890.             } catch (Exception var6) {
  891.             }
  892.  
  893.             return true;
  894.          }
  895.       }
  896.  
  897.       return false;
  898.    }
  899.  
  900.    private void saveHighScores() {
  901.       try {
  902.          ByteArrayOutputStream var1 = new ByteArrayOutputStream();
  903.          DataOutputStream var2 = new DataOutputStream(var1);
  904.  
  905.          for(int var3 = 0; var3 < this.hsName.length; ++var3) {
  906.             for(int var4 = 0; var4 < this.hsName[var3].length; ++var4) {
  907.                var2.writeUTF(this.hsName[var3][var4]);
  908.                var2.writeInt(this.hsValue[var3][var4]);
  909.             }
  910.          }
  911.  
  912.          byte[] var5 = var1.toByteArray();
  913.          Jil.saveData("Scores", var5);
  914.       } catch (Exception var6) {
  915.       }
  916.  
  917.    }
  918.  
  919.    private void loadHighScores() {
  920.       try {
  921.          byte[] var1 = Jil.loadData("Scores");
  922.          ByteArrayInputStream var2 = new ByteArrayInputStream(var1);
  923.          DataInputStream var3 = new DataInputStream(var2);
  924.  
  925.          for(int var4 = 0; var4 < this.hsName.length; ++var4) {
  926.             for(int var5 = 0; var5 < this.hsName[var4].length; ++var5) {
  927.                this.hsName[var4][var5] = var3.readUTF();
  928.                this.hsValue[var4][var5] = var3.readInt();
  929.             }
  930.          }
  931.       } catch (Exception var6) {
  932.       }
  933.  
  934.    }
  935.  
  936.    private void refresh() {
  937.       ((Canvas)this).repaint();
  938.       ((Canvas)this).serviceRepaints();
  939.       Thread.yield();
  940.    }
  941.  
  942.    private boolean ootaNappii(int var1) {
  943.       try {
  944.          this.key = -1;
  945.          this.waitForAnyKey(var1);
  946.       } catch (Exception var3) {
  947.       }
  948.  
  949.       return this.isKeyPressed();
  950.    }
  951.  
  952.    private boolean startMenu() {
  953.       try {
  954.          this.startEasy = true;
  955.          this.field_12 = 0;
  956.          this.refresh();
  957.  
  958.          while(true) {
  959.             while(!this.ootaNappii(500)) {
  960.                this.sblink = !this.sblink;
  961.                this.refresh();
  962.             }
  963.  
  964.             if (this.key == 0) {
  965.                Runko.soundSelect();
  966.                if (this.startEasy) {
  967.                   if (this.field_12 != 0) {
  968.                      Runko.soundSelect();
  969.                      break;
  970.                   }
  971.  
  972.                   this.field_12 = 1;
  973.                } else {
  974.                   this.runko.showHelp();
  975.                }
  976.             } else {
  977.                Runko.soundMove();
  978.                this.sblink = true;
  979.                this.startEasy = !this.startEasy;
  980.                this.refresh();
  981.             }
  982.          }
  983.       } catch (Exception var2) {
  984.       }
  985.  
  986.       return !this.startEasy;
  987.    }
  988.  
  989.    private void startMenu(Graphics var1) {
  990.       var1.setClip(0, 0, this.field_7, this.field_8);
  991.       var1.setColor(16777215);
  992.       var1.fillRect(0, 0, this.field_7, this.field_8);
  993.       int var2 = ((Canvas)this).getHeight() - (this.iHelp[this.field_12].getHeight() + this.iStart[0].getHeight()) >> 1;
  994.       if (var2 < 0) {
  995.          var2 = 0;
  996.       }
  997.  
  998.       var1.drawImage(this.iHelp[this.field_12], this.field_9, var2, 17);
  999.       var2 += this.iHelp[this.field_12].getHeight() + 2;
  1000.       var1.drawImage(this.iStart[0], this.field_9, var2, 17);
  1001.       int var3 = this.iStart[0].getHeight() >> 1;
  1002.       if (this.sblink) {
  1003.          if (this.startEasy) {
  1004.             var1.setClip(0, var2, this.field_7, var3);
  1005.          } else {
  1006.             var1.setClip(0, var2 + var3, this.field_7, var3);
  1007.          }
  1008.  
  1009.          var1.drawImage(this.iStart[1], this.field_9, var2, 17);
  1010.       }
  1011.  
  1012.    }
  1013. }
  1014.